home *** CD-ROM | disk | FTP | other *** search
- ;0
- Darray: dc.l 0
- ;4
- PXarray: dc.l 0
- ;8
- PYarray: dc.l 0
- ;12
- ZWT:
- LParray:
- x1: dc.w 0
- y1: dc.w 0
- ;16
- RParray:
- x2: dc.w 0
- y2: dc.w 0
- ;20
- VCPL:
- x3: dc.w 0
- VCPR:
- y3: dc.w 0
- x4: dc.w 0
- y4: dc.w 0
- PTS: dc.w 0
- PWarray: dc.l 0
- PUarray: dc.l 0
- FL: dc.w 0
- ;40
- OP: dc.w 0
- ;42
- FOarray: dc.l 0
- ;46
- ZOarray: dc.l 0
- ;50
- FP: dc.w 0
- ;52
- ZP: dc.w 0
- ;54
- Start:
-
- movem.l d0-d7/a0-a6,-(a7)
-
- move.w OP(pc),d0
- cmp.w #1,d0
- blt BETPTS
- beq CALCORD
- cmp.w #3,d0
- blt CHKINVIS
- beq ELIMINLEFT
-
- ELIMINRIGHT:
-
- lea sol(pc),a5
- move.l LParray(pc),a0
- move.l PXarray(pc),a2
- move.l PYarray(pc),a3
- move.w VCPL(pc),d7
- subq #1,d7
- .outer
- move.w VCPL(pc),d6
- subq #1,d6
- sub.w d7,d6
- move.w d7,-(a7)
-
- move.l (a0)+,d0
- blt .notthis
- move.l (a3,d0.w*4),d1
- move.l (a2,d0.w*4),d0
- move.l a0,a1
-
- .inner
- move.w #0,(a5)
- move.l (a1)+,d2
- blt.s .notinn
- move.l (a3,d2.w*4),d3
- move.l (a2,d2.w*4),d2
- sub.w d1,d3
- sub.w d0,d2
-
- move.w ZP(pc),d7
- move.l ZOarray(pc),a4
- .dest:
- move.l (a4)+,d4
- move.l (a3,d4.w*4),d5
- move.l (a2,d4.w*4),d4
- sub.w d0,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- beq.s .neither
- bgt.s .ssor
- st (a5)
- bra.s .neither
- .ssor:
- st 1(a5)
- .neither:
- dbra d7,.dest
-
- move.b (a5),d4
- move.b 1(a5),d5
- tst.b d4
- beq.s .nol
- tst.b d5
- bne.s .onboth
- move.l #-1,-4(a1)
- bra.s .onboth
-
- .nol:
- tst.b d5
- beq.s .onboth
- move.l #-1,-4(a0)
-
- .onboth:
-
- .notinn:
- dbra d6,.inner
-
- .notthis:
-
- move.w (a7)+,d7
- dbra d7,.outer
-
- move.l LParray(pc),a0
- move.w VCPL(pc),d0
- move.l a0,a1
- move.w #0,d1
- .elim:
- move.l (a0)+,d2
- blt.s .doit
- move.l d2,(a1)+
- addq #1,d1
- .doit:
- dbra d0,.elim
-
- lea OP(pc),a0
- move.w d1,(a0)
-
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
-
- ELIMINLEFT:
-
- lea sol(pc),a5
- move.l LParray(pc),a0
- move.l PXarray(pc),a2
- move.l PYarray(pc),a3
- move.w #0,d7
- .outer
- move.w d7,d6
- addq #1,d6
- move.w d7,-(a7)
-
- move.l (a0)+,d0
- blt .notthis
- move.l (a3,d0.w*4),d1
- move.l (a2,d0.w*4),d0
- move.l a0,a1
-
- .inner
- move.w #0,(a5)
- move.l (a1)+,d2
- blt.s .notinn
- move.l (a3,d2.w*4),d3
- move.l (a2,d2.w*4),d2
- sub.w d1,d3
- sub.w d0,d2
-
- move.w ZP(pc),d7
- move.l ZOarray(pc),a4
- .dest:
- move.l (a4)+,d4
- move.l (a3,d4.w*4),d5
- move.l (a2,d4.w*4),d4
- sub.w d0,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- beq.s .neither
- bgt.s .ssor
- st (a5)
- bra.s .neither
- .ssor:
- st 1(a5)
- .neither:
- dbra d7,.dest
-
- move.b (a5),d4
- move.b 1(a5),d5
- tst.b d4
- beq.s .nol
- tst.b d5
- bne.s .onboth
- move.l #-1,-4(a0)
- bra.s .onboth
-
- .nol:
- tst.b d5
- beq.s .onboth
- move.l #-1,-4(a1)
-
- .onboth:
-
- .notinn:
- add.w #1,d6
- move.w VCPL(pc),d5
- subq #1,d5
- cmp.w d5,d6
- ble .inner
-
- .notthis:
-
- move.w (a7)+,d7
- addq #1,d7
- move.w VCPL(pc),d5
- sub.w #2,d5
- cmp.w d5,d7
- ble .outer
-
- move.l LParray(pc),a0
- move.w VCPL(pc),d0
- sub #1,d0
- move.l a0,a1
- move.w #0,d1
- .elim:
- move.l (a0)+,d2
- blt.s .doit
- move.l d2,(a1)+
- addq #1,d1
- .doit:
- dbra d0,.elim
-
- lea OP(pc),a0
- move.w d1,(a0)
-
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- CHKINVIS:
-
- move.l LParray(pc),a0
- move.l PXarray(pc),a2
- move.l PYarray(pc),a3
- move.w VCPL(pc),d7
-
- .outer:
- move.w d7,-(a7)
-
- move.l (a0)+,d0
- move.l (a3,d0.w*4),d1
- move.l (a2,d0.w*4),a5
- move.l RParray(pc),a1
- move.w VCPR(pc),d7
- .inner:
- move.l (a1)+,d2
- move.l (a3,d2.w*4),d3
- move.l (a2,d2.w*4),d2
- sub.w a5,d2
- sub.w d1,d3
-
- move.l FOarray(pc),a4
- move.w FP(pc),d6
-
- .source:
- move.l (a4)+,d4
- move.l (a3,d4.w*4),d5
- move.l (a2,d4.w*4),d4
- sub.w a5,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- sgt d0
- dbgt d6,.source
-
- .outsource:
-
- tst.b d0
- bne.s .notinvis1
- lea OP(pc),a0
- move.w #1,(a0)
- move.w (a7)+,d7
- bra .missout
-
- .notinvis1:
-
- move.l ZOarray(pc),a4
- move.w ZP(pc),d6
-
- .dest:
- move.l (a4)+,d4
- move.l (a3,d4.w*4),d5
- move.l (a2,d4.w*4),d4
- sub.w a5,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- slt d0
- dblt d6,.dest
-
- .outdest:
-
- tst.b d0
- bne.s .notinvis2
- lea OP(pc),a0
- move.w #1,(a0)
- move.w (a7)+,d7
- bra .missout
-
- .notinvis2:
-
- dbra d7,.inner
-
- move.w (a7)+,d7
- dbra d7,.outer
-
- lea OP(pc),a0
- move.w #0,(a0)
-
- .missout:
-
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- CALCORD:
-
- move.l ZWT(pc),a4
- move.l ZOarray(pc),a1
- move.l PXarray(pc),a2
- move.l PYarray(pc),a3
- move.w ZP(pc),d7
- lea sol(pc),a5
-
- moveq #0,d0
- moveq #1,d1
-
- .outer:
-
- move.w d7,-(a7)
-
- move.l (a1)+,d3
- cmp.l #1,(a4)+
- beq .wallnotline
- move.w FP(pc),d6
- move.l FOarray(pc),a0
-
- move.l (a1),d2
- move.l (a2,d3.w*4),d7
- move.l (a3,d3.w*4),a6
- move.l (a3,d2.w*4),d3
- move.l (a2,d2.w*4),d2
- sub.w d7,d2
- sub.w a6,d3
- clr.w (a5)
-
- .inner:
- move.l (a0)+,d4
- move.l (a3,d4.w*4),d5
- move.l (a2,d4.w*4),d4
- sub.w d7,d4
- sub.w a6,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- beq.s .noset
- bgt.s .setr
- st (a5)
- bra.s .noset
- .setr:
- st 1(a5)
- .noset:
-
- dbra d6,.inner
-
- tst.b (a5)
- beq.s .nosol
- tst.b 1(a5)
- bne.s .nothing
- bset d1,d0
- bra.s .nothing
-
- .nosol:
- tst.b 1(a5)
- beq.s .nothing
- bset d1,d0
- addq #1,d1
- bset d1,d0
- subq #1,d1
-
- .nothing:
-
- .wallnotline:
-
- addq #3,d1
-
- move.w (a7)+,d7
- dbra d7,.outer
-
- lea FP(pc),a0
- move.l d0,(a0)
-
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- sol: dc.b 0
- sor: dc.b 0
-
- BETPTS:
- move.w #16,d6
- move.l Darray(pc),a0
- move.l PXarray(pc),a1
- move.l PYarray(pc),a2
- move.l PWarray(pc),a4
- lea x1(pc),a3
- move.w PTS(pc),d7
-
- move.w 4(a3),d2
- move.w (a3),d0
- sub.w d0,d2
- move.w 6(a3),d3
- move.w 2(a3),d1
- sub.w d1,d3
-
- calcd1loop:
- move.l (a1)+,d4
- move.l (a2)+,d5
- tst.l (a4)+
- beq.s no1
- sub.w d0,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- move.l d5,(a0)
- no1:
- adda.w d6,a0
- dbra d7,calcd1loop
-
- move.l Darray(pc),a0
- addq.l #4,a0
- move.l PXarray(pc),a1
- move.l PYarray(pc),a2
- move.l PWarray(pc),a4
- move.w PTS(pc),d7
-
- move.w 8(a3),d2
- move.w 4(a3),d0
- sub.w d0,d2
- move.w 10(a3),d3
- move.w 6(a3),d1
- sub.w d1,d3
-
- calcd2loop:
- move.l (a1)+,d4
- move.l (a2)+,d5
- tst.l (a4)+
- beq.s no2
- sub.w d0,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- move.l d5,(a0)
- no2:
- adda.w d6,a0
- dbra d7,calcd2loop
-
-
- move.l Darray(pc),a0
- addq #8,a0
- move.l PXarray(pc),a1
- move.l PYarray(pc),a2
- move.l PWarray(pc),a4
- move.w PTS(pc),d7
-
- move.w 12(a3),d2
- move.w 8(a3),d0
- sub.w d0,d2
- move.w 14(a3),d3
- move.w 10(a3),d1
- sub.w d1,d3
-
- calcd3loop:
- move.l (a1)+,d4
- move.l (a2)+,d5
- tst.l (a4)+
- beq.s no3
- sub.w d0,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- move.l d5,(a0)
- no3:
- add.w d6,a0
- dbra d7,calcd3loop
-
- move.l Darray(pc),a0
- adda.w #12,a0
- move.l PXarray(pc),a1
- move.l PYarray(pc),a2
- move.l PWarray(pc),a4
- move.w PTS(pc),d7
-
- move.w (a3),d2
- move.w 12(a3),d0
- sub.w d0,d2
- move.w 2(a3),d3
- move.w 14(a3),d1
- sub.w d1,d3
-
- calcd4loop:
- move.l (a1)+,d4
- move.l (a2)+,d5
- tst.l (a4)+
- beq.s no4
-
- sub.w d0,d4
- sub.w d1,d5
- muls d2,d5
- muls d3,d4
- sub.l d4,d5
- move.l d5,(a0)
- no4:
- add.w d6,a0
- dbra d7,calcd4loop
-
- move.w PTS(pc),d7
- move.l Darray(pc),a0
- move.l PWarray(pc),a1
- move.l PUarray(pc),a2
- move.w FL(pc),d0
- cmp.w #1,d0
- beq FLFR
- bgt TLTR
-
- .chck
-
- moveq #0,d5
- tst.l (a1)+
- beq.s .no
-
- ; If all d>0:
- ; =-3
-
- *
- ; if d0<=0
- ; =-4
- ; if d1<=0 or d3<=0
- ; =5
-
- *
-
- ; if d2<=0
- ; =-2
- ; if d1<=0 or d3<=0
- ; =-1
-
- move.l (a0),d0
- sle d0
- move.l 4(a0),d1
- sle d1
- move.l 8(a0),d2
- sle d2
- move.l 12(a0),d3
- sle d3
-
- moveq #-3,d5
-
- move.b d0,d4
- or.b d1,d4
- or.b d2,d4
- or.b d3,d4
- beq.s .allok
- moveq #0,d5
-
- tst.b d0
- beq.s .notf
- moveq #-4,d5
- or.b d1,d3
- beq.s .allok
- moveq #-5,d5
- bra.s .allok
- .notf:
-
- tst.b d2
- beq.s .nots
- moveq #-2,d5
- or.b d1,d3
- beq.s .allok
- moveq #-1,d5
- .nots
-
- .allok:
-
- .no
- move.l d5,(a2)+
- adda.w d6,a0
- dbra d7,.chck
-
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- FLFR:
-
- .chck
- moveq #0,d5
- tst.l (a1)+
- beq.s .no
-
- move.l (a0),d0
- sle d0
- move.l 4(a0),d1
- sle d1
- move.l 8(a0),d2
- sle d2
-
- moveq #-3,d5
-
- move.b d0,d3
- or.b d1,d3
- or.b d2,d3
- beq.s .allok
- moveq #0,d5
-
- tst.b d0
- beq.s .notf
- moveq #-4,d5
- or.b d1,d2
- beq.s .allok
- moveq #0,d5
- bra.s .allok
- .notf
-
- tst.b d2
- beq.s .nots
- moveq #-2,d5
- or.b d1,d0
- beq.s .allok
- moveq #0,d5
- .nots
-
- .allok
-
- .no
- move.l d5,(a2)+
- adda.w d6,a0
- dbra d7,.chck
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- TLTR:
- .chck
- moveq #0,d5
- tst.l (a1)+
- beq.s .no
-
- move.l (a0),d0
- sle d0
- move.l 12(a0),d1
- sle d1
- move.l 8(a0),d2
- sle d2
-
- moveq #-3,d5
-
- move.b d0,d3
- or.b d1,d3
- or.b d2,d3
- beq.s .allok
- moveq #0,d5
-
- tst.b d0
- beq.s .notf
- moveq #-4,d5
- or.b d1,d2
- beq.s .allok
- moveq #0,d5
- bra.s .allok
- .notf
-
- tst.b d2
- beq.s .nots
- moveq #-2,d5
- or.b d1,d0
- beq.s .allok
- moveq #0,d5
- .nots
-
- .allok
-
-
- .no
- move.l d5,(a2)+
- adda.w d6,a0
- dbra d7,.chck
- movem.l (a7)+,d0-d7/a0-a6
- rts
-